package com.fau.cm.service;

import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.Workbook;

import com.fau.cm.entity.MedicalAdmin;
import com.fau.cm.entity.MedicalCall;
import com.fau.cm.entity.MedicalCallEnd;
import com.fau.cm.entity.MedicalCallPending;
import com.fau.cm.entity.MedicalCallUntreated;
import com.fau.cm.entity.MedicalGroup;
import com.fau.cm.util.Page;

/**
 * @desc 中心话务任务管理接口
 * @author kangyj
 * @datetime 2014年10月28日,下午4:15:51
 */
public interface ICallCenterManagerService {

	/**
	 * @desc 分页查询未分配话务任务
	 * @param call 话务任务表
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月14日,下午8:24:03
	 */
	public Page findCallByPage(MedicalCall call, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询未处理话务任务
	 * @param callUntreated 未处理话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:55:20
	 */
	public Page findCallUntreatedByPage(MedicalCallUntreated callUntreated, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询待处理话务任务
	 * @param callPending 待处理话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:58:19
	 */
	public Page findCallPendingByPage(MedicalCallPending callPending, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询已转移话务任务
	 * @param callUntreated 已转移话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:59:11
	 */
	public Page findCallTransferByPage(MedicalCallUntreated callUntreated, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 分页查询已结束话务任务
	 * @param callEnd 已结束话务任务
	 * @param admin 当前登录用户
	 * @param map 分页参数
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月26日,下午5:59:56
	 */
	public Page findCallEndByPage(MedicalCallEnd callEnd, MedicalAdmin admin, Map<String, Object> map);
	
	/**
	 * @desc 查询当前用户所在中心所有组
	 * @param admin 当前用户
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月28日,下午8:16:55
	 */
	public List<MedicalGroup> findGroupList(MedicalAdmin admin);
	
	/**
	 * @desc 查询组下话务员集合
	 * @param groupId 组id
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月28日,上午9:51:30
	 */
	public List<MedicalAdmin> findUserList(String groupId);
	
	/**
	 * @desc 中心话务分配--未分配任务直接分配到话务员
	 * @param callsId 话务任务id
	 * @param usersId 话务员id
	 * @author kangyj
	 * @datetime 2014年10月15日,下午4:56:36
	 */
	public boolean callAllocate(String callsId, String usersId);
	
	/**
	 * @desc 中心话务分配，未分配--批量分配到组
	 * @param callsId 待分配话务任务id
	 * @param groupsId 组id
	 * @author kangyj
	 * @datetime 2014年10月18日,下午4:03:47
	 */
	public boolean callAllocateGroup(String callsId, String groupsId);
	
	/**
	 * @desc 批量修改话务任务类别--未分配任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallCategory(String callIds, String categoryKey);
	/**
	 * @desc 批量修改话务任务类别--未处理任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallUntreatedCategory(String callIds, String categoryKey);
	/**
	 * @desc 批量修改话务任务类别--待处理任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallPendingCategory(String callIds, String categoryKey);
	
	/**
	 * @desc 批量修改话务任务类别--已结束任务
	 * @param callIds
	 * @param categoryKey
	 * @author kangyj
	 * @datetime 2014年10月23日,下午2:24:41
	 */
	public void editCallEndCategory(String callIds, String categoryKey);
	
	/**
	 * @desc 中心话务分配--未分配任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:06:41
	 */
	public void editCallStatus(String callIds, String statusKey);
	
	/**
	 * @desc 中心话务分配--未处理任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallUntreatedSta(String callIds, String statusKey);
	
	/**
	 * @desc 中心话务分配--待处理任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallPendingSta(String callIds, String statusKey);
	
	/**
	 * @desc 中心话务分配--已转移任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallTransferSta(String callIds, String statusKey);
	
	/**
	 * @desc 中心话务分配--已结束任务修改状态
	 * @param callIds 待修改状态任务id
	 * @param statusKey 将要修改为的状态值
	 * @return
	 * @author kangyj
	 * @datetime 2014年10月25日,下午11:30:46
	 */
	public void editCallEndSta(String callIds, String statusKey);
	
	/**
	 * @desc 批量删除--未分配话务任务
	 * @param call 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delCall(MedicalCall call);
	
	/**
	 * @desc 批量删除--未处理话务任务
	 * @param callUntreated 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delUntreatedCall(MedicalCallUntreated callUntreated);
	
	/**
	 * @desc 批量删除--待处理话务任务
	 * @param callPending 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delPendingCall(MedicalCallPending callPending);
	
	/**
	 * @desc 批量删除--已结束话务任务
	 * @param callEnd 待删除话务任务
	 * @author kangyj
	 * @datetime 2014年10月19日,下午6:37:57
	 */
	public void delEndCall(MedicalCallEnd callEnd);
	
	
	/*------------------------------------------中心话务管理---------------------------------------------------*/
	
	
	/**
	 * @desc 回收未分配任务
	 * @param callId 待回收话务id
	 * @author kangyj
	 * @datetime 2014年10月29日,下午5:41:08
	 */
	public void recoverUnaCall(String callsId);
	
	/**
	 * @desc 回收未处理任务
	 * @param callId 待回收话务id
	 * @author kangyj
	 * @datetime 2014年10月29日,下午6:32:42
	 */
	public void recoverUntCall(String callsId);
	
	/**
	 * @desc 回收待处理
	 * @param callId 待回收话务id
	 * @author kangyj
	 * @datetime 2014年10月29日,下午6:32:55
	 */
	public void recoverPenCall(String callsId);
	
	/**
	 * @desc 回收已结束任务
	 * @param callId 待回收话务id
	 * @author kangyj
	 * @datetime 2014年10月29日,下午6:33:35
	 */
	public void recoverEndCall(String callsId);
	
	/**
	 * @desc 导出当前页-话务分配
	 * @param id 待导出Id
	 * @return Workbook
	 * @throws Exception
	 * @author liy
	 * @datetime 2015年1月4日,下午3:08:19
	 */
	public Workbook exportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出全部-话务分配
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月4日,下午2:45:05
	 */
	public Workbook exportAll(MedicalAdmin admin,MedicalCall call) throws Exception;
	
	/**
	 * @desc 导出全部-已分配
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月5日,下午1:09:36
	 */
	public Workbook assignedExportAll(MedicalAdmin admin,MedicalCall call) throws Exception;
	
	/**
	 * @desc 导出当前-已分配
	 * @return Workbook
	 * @throws Exception
	 * @author liy
	 * @datetime 2015年1月5日,下午1:52:37
	 */
	public Workbook assignedExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出全部-未处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月5日,下午2:10:39
	 */
	public Workbook untreatedExportAll(MedicalAdmin admin,MedicalCallUntreated call) throws Exception;
	
	/**
	 * @desc 导出全部-待处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月5日,下午2:33:14
	 */
	public Workbook penExportAll(MedicalAdmin admin,MedicalCallPending call) throws Exception;
	
	/**
	 * @desc 导出全部-已转移
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月5日,下午2:48:09
	 */
	public Workbook traExportAll(MedicalAdmin admin,MedicalCallUntreated call) throws Exception;
	
	/**
	 * @desc 导出全部-已结束
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月5日,下午2:59:59
	 */
	public Workbook endExportAll(MedicalAdmin admin,MedicalCallEnd call) throws Exception;
	
	/**
	 * @desc 导出当前-未处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月5日,下午2:25:20
	 */
	public Workbook untreatedExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出当前-待处理
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月5日,下午2:37:47
	 */
	public Workbook penExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出当前-已转移
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月5日,下午2:48:34
	 */
	public Workbook traExportCurrent(String id) throws Exception;
	
	/**
	 * @desc 导出当前-已结束
	 * @return Workbook
	 * @throws Exception 
	 * @author liy
	 * @datetime 2015年1月5日,下午3:00:27
	 */
	public Workbook endExportCurrent(String id) throws Exception;
	
}
